ぼくがかんがえた最強のDiscord Bot作りました!
wikiもけっこうくわしく書きました!(たぶん...) wikiにある通り、下記の招待リンクから、discordサーバーに参加すれば試せます!
Issueとか書くまでもないようなこととかあれば書き込んでください...
機能
通常用カテゴリ(messagecog.pyで実装)
/group
メンバー数を指定:指定されたメンバー数になるように、適当な数のチームに分ける
コマンド実行者がボイスチャンネルに接続している必要アリ
サーバーに複数のボイスチャンネルがある必要アリ
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/group.png?raw=true
/team チーム数指定:メンバー数が均等になるよう、指定された数に分ける
コマンド実行者がボイスチャンネルに接続している必要アリ
サーバーに複数のボイスチャンネルがある必要アリ
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/team.png?raw=true
/vcmembers ボイスチャンネルに接続しているメンバーリストを取得
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/vcmembers.png?raw=true
/poll 簡易的な投票機能(引数が1つの場合と2以上の場合で動作が変わる)。
引数が1件の場合、YES, NOの投票となる
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/poll_1.png?raw=true
引数が2件以上の場合、1つ目の引数がタイトルになり、2件目以降が投票される項目になる
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/poll_2.png?raw=true
/radikoSearch ラジコの番組表を検索する機能(サブコマンド必須)
サブコマンドなし(/radikoSearch)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/radikoSearch-1.png?raw=true
通常の検索(/radikoSearch normal)
もっとも単純なキーワードのみ指定
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/radikoSearch_normal-1.png?raw=true
キーワード、検索対象(過去、未来)、地域を指定
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/radikoSearch_normal-2.png?raw=true
日付を指定して検索(/radikoSearch withDate)
sを付与し開始日付、eを付与し終了日付を設定できる
todayを設定すると当日として扱われる(省略系のtも可能)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/radikoSearch_withDate-1.png?raw=true
日付の桁数で扱いが変わる(1桁はx日後として扱われ、2桁は当月の日付と扱われ、4桁は今年の月日として扱われる)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/radikoSearch_withDate-3.png?raw=true
/countMessage
メッセージを数え、ランキングにするコマンド
チャンネル名、(チャンネルごとに)数える数を指定できる。チャンネル名でallを指定するとすべてのチャンネルを数える
/countReaction
リアクションを数え、ランキングにするコマンド
チャンネル名、(チャンネルごとに)数える数を指定できる。チャンネル名でallを指定するとすべてのチャンネルを数える
管理用カテゴリ(admincog.pyで実装)
/channel チャンネルを操作するコマンド(サブコマンド必須)
チャンネルの操作権限を渡すと、削除も可能だから嫌だなと思って作ったコマンド。
サブコマンドmakeでPublicなチャンネルを作成
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/channel_make.png?raw=true
サブコマンドprivateMakeでPrivateなチャンネルを作成
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/channel_privateMake.png?raw=true
サブコマンドroleDeleteでチャンネルからロールを削除
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/channel_roleDelete.png?raw=true
サブコマンドroleDeleteでチャンネルからロールを削除失敗
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/channel_roleDelete(error).png?raw=true
/getAuditLog 監査ログを取得
とっても重たい上に見づらい。。。
/purge メッセージを削除(自分とBot※のメッセージのみ削除される)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/purge.png?raw=true
仕様を変更し、環境変数でBotの発言を削除可能かは設定可能とした(環境変数で設定がない場合は削除できない)
よく考えると一般的なユーザーはBotの発言を削除されたくないと思われるため
その辺のゲストが突然Botの発言削除しまくったらBANされる...
/deleteMessage
https://raw.githubusercontent.com/tetsuya-ki/images/main/discord-bot-heroku/deleteMessage.png
リアクションチャンネラーカテゴリ(reactionchannelercog.pyで実装)
/reactionChanneler リアクションチャンネラーを操作するコマンド(サブコマンド必須)
Slackのリアク字チャンネラーからインスパイアされ、作成したもの。
Herokuは1日1回再起動し、ファイルが全部消えてしまうため...
リアクションチャンネラー追加
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/reactionChanneler_add.png?raw=true
リアクションチャンネラー削除
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/reactionChanneler_delete.png?raw=true
リアクションチャンネラー表示
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/reactionChanneler_list.png?raw=true
リアクションチャンネラー全削除
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/reactionChanneler_purge.png?raw=true
その他、リアクションによって発動する機能をまとめている
:pushpin:をつけると、ピン留めする機能
メッセージ編集権限を与えるのは微妙だが、ピン留めさせたかったため
:pushpin: のイベント
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/event_pushpin.png?raw=True
リアクションチャンネラーで登録したものが反応する部分
リアクションチャンネラーの対象のリアクションを追加すると、
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/event_reaction.png?raw=True
あらかじめ指定されたチャンネルへリンクが投稿される
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/event_reaction_added.png?raw=True
https://raw.githubusercontent.com/tetsuya-ki/images/main/discord-bot-heroku/event_reaction_added(webhook).png
:ok_hand:をつけると画像を保存する機能
ゲームカテゴリ(gamecog.pyで実装)
/wordWolf ワードウルフを行うコマンド
ワードウルフ開始(これは時間が経過し、ネタバレ投稿された画像)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/wordWolf-1.png?raw=True
BotからくるDMの様子
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/wordWolf-2.png?raw=True
/ngWordGame NGワードゲームを行うコマンド
NGワードゲーム開始(これは時間が経過し、ネタバレ投稿された画像)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/ngwordgame-1.png?raw=True
BotからくるDMの様子
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/ngwordgame-2.png?raw=True
/coyoteGame コヨーテを行うコマンド
コヨーテ開始(説明が長いですがやれば分かります!)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/coyoteGame_start.png?raw=True
コヨーテ開始やディール時のDMの様子
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/coyoteGame_DM.png?raw=True
コヨーテのディール(カードを配る)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/coyoteGame_deal.png?raw=True
コヨーテ開始(自分でデッキを設定)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/coyoteGame_setDeckAndStart.png?raw=True
コヨーテの状況説明
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/coyoteGame_description.png?raw=True
コヨーテの状況説明(ネタバレ有)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/coyoteGame_descriptionAll.png?raw=True
/ohgiriGame
「大喜利」用のJSONを返却するURLを作成する方法は大喜利JSONに書きました! 大喜利開始(数字を渡すと、勝利点が設定される。すぐ終わらせたいなら、/o start 1等で実行)
https://raw.githubusercontent.com/tetsuya-ki/images/main/discord-bot-heroku/ohgiri_start.png
大喜利開始後、BotからくるDMの様子(ここに表示された番号を回答として選択)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/ohgiri_dm.png?raw=True
大喜利の回答を選んだところ
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/ohgiri_answer.png?raw=True
大喜利の状況説明(経過ターン、現在の親、お題、それぞれの得点などが表示される)
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/ohgiri_description.png?raw=True
大喜利の回答カードを捨てるコマンド(いい回答が手札にない場合使うコマンド)
https://github.com/tetsuya-ki/images/raw/main/discord-bot-heroku/ohgiri_discard.png?raw=True
一応ペナルティとして1点マイナスです!(本家にはありません!)
親が回答を選択
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/ohgiri_choice.png?raw=True
親が回答を選択しゲーム終了するところ(誰かが勝利点に到達したら終了)
https://raw.githubusercontent.com/tetsuya-ki/images/main/discord-bot-heroku/ohgiri_choice2(game_over).png
メッセージイベント用(onmessagecog.pyで実装)
コマンドを使って実行する訳ではない機能
メッセージ投稿時に発動する、ScrapboxのURL展開機能
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/on_message-scrapbox_url_expander.png?raw=true
メッセージ編集時(discordによるURLの展開時)に発動する、画像保存機能
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/on_message_edit-save_image.png?raw=true
カテゴリ未設定
/help ヘルプを表示(/help channelのように指定すると説明が返答される)
コマンドが分からない、使い方が分からない、エイリアスが分からない時に使用
helpコマンドでこのBOTの使えるコマンドが表示される
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/help.png?raw=true
helpコマンドの結果、下線で表示された物(Cogに付けた機能名)について指定すると説明が表示される
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/help_category.png?raw=true
コマンドを指定すれば、コマンドの説明が表示される
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/help_subcommand.png?raw=true
コマンドのサブコマンドも(あれば)指定でき、説明が表示される
https://github.com/tetsuya-ki/images/blob/main/discord-bot-heroku/help_subcommand_subcommand.png?raw=true
環境変数の説明
DISCORD_TOKEN = 'discord_bot_token'
ここにDiscord Botのトークンを貼り付ける(とても重要。これをしないと動かない)
LOG_LEVEL = INFO
ログレベルを設定したい場合、設定する。デフォルトはWARN。DEBUG, INFO, WARN, ERRORが設定可能
AUDIT_LOG_SEND_CHANNEL = "guild1.audit_log_send_channel_id1;guild1.audit_log_send_channel_id1"
管理用のチャンネルを記載する。ギルドID.管理用のチャンネルIDの形式で記載する。複数ある場合は、「;」を挟む必要がある
IS_HEROKU = True
Herokuで動かす場合、Trueとする
discordのチャンネルを使用し、リアクションチャンネラーのデータが消えないように試みる
(reaction_channel_controlを作成し、そこにjsonデータを添付することでデータを保持する)
SAVE_FILE_MESSAGE = "twitter"
保存したい画像ファイルをもつURLの一部を指定。正規表現対応
複数ある場合はパイプ(|)などを駆使すること
FIRST_REACTION_CHECK = True
すでにリアクションが付けられた物について、リアクションチャンネラーを発動しないかどうかの設定
基本的にはTrueがオススメ。寂しいときはFalseでもOK
(何回だってチャンネルに転記されちゃいますが!)
REACTION_CHANNELER_PERMIT_WEBHOOK_ID = "webhook_id"
リアクションチャンネラー機能の拡張設定。ここにWebhook IDか「all」という文字列を記載すると、リアクションチャンネラー機能でWebhookが使用できる(v0.7.1で実装)
リアクションを設定するだけで、別のギルドにメッセージを転送することができるようになる
この環境変数にWebhook IDがない、または、allが記載されていない場合、登録は可能だが、実際に実行はされない
勝手にリアクションチャンネラーを登録され情報が流出することを防ぐため、環境変数で指定がない限り実行されないようにする(少し面倒かもしれない)
SCRAPBOX_SID_AND_PROJECTNAME = "all:scrapbox_sid@projectname1,projectname2;guild1:scrapbox_sid@projectname3"
Scrapboxの展開をする際に使用する、sidとプロジェクト名についての設定
設定が複数存在する場合、「;」を挟む必要がある
左端のallの部分(対象ギルド)をギルドIDにすると、指定のギルドでしか展開しない
allの場合、すべてのギルドで発動
sidを適用したいプロジェクトが複数ある場合、「,」(コンマ)を挟む必要がある
PURGE_TARGET_IS_ME_AND_BOT=False
/purgeコマンド、/deleteMessageコマンドで削除する対象にBotを含むかの設定(設定がない場合は、自分の投稿のみが削除対象)
OHGIRI_JSON_URL=ohgiri_json_url
大喜利機能で使用するJSONをURLから取得する場合に設定(Cogを読み込む際に取得されます)
大喜利JSONに具体的な設定を書きました! そこで作成したウェブアプリのURLを登録する感じです! WORDWOLF_JSON_URL=wordwolf_json_url
ワードウルフ機能で使用するJSONをURLから取得する場合に設定(Cogを読み込む際に取得されます)。環境変数がない場合は、jsonファイルを使用
NGWORD_GAME_JSON_URL=ngword_game_json_url
NGワードゲーム機能で使用するJSONをURLから取得する場合に設定(Cogを読み込む際に取得されます)。環境変数がない場合は、jsonファイルを使用
COUNT_RANK_SETTING=5
/countMessageと/countReactionで使用するランキングの数を設定。未指定の場合、5として扱う。